﻿#define _CRT_SECURE_NO_WARNINGS
//作者：爱吃糖的boy
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

////回调函数:回调函数就是⼀个通过函数指针调⽤的函数。
//int add(int a, int b)
//{
//	return a + b;
//}
//int sub(int a, int b)
//{
//	return a - b;
//}
//int mul(int a, int b)
//{
//	return a * b;
//}
//int div(int a, int b)
//{
//	return a / b;
//}

//void calc(int(*pf)(int, int))//完成计算
//{
//	int ret = 0;
//	int x, y;
//	printf("输入操作数：\n");
//	scanf("%d %d", &x, &y);
//	ret = pf(x, y);
//	printf("ret = %d\n", ret);
//}

//int main()
//{
//	int x, y;
//	int input = 1;
//	int ret = 0;
//	do
//	{
//		printf("*****************************\n");
//		printf("******1.add  2.sub***********\n");
//		printf("******3.mul  4.div***********\n");
//		printf("******0.exit   **************\n");
//		printf("*****************************\n");
//
//		printf("请选择：\n");
//		scanf("%d", &input);
//		switch (input)
//		{
//		case 1:
//			calc(add);
//			break;
//		case 2:
//			calc(sub);
//			break;
//		case 3:
//			calc(mul);
//			break;
//		case 4:
//			calc(div);
//			break;
//		case 0:
//			printf("退出程序\n");
//			break;
//		default:
//			printf("选择错误\n");
//			break;
//		}
//	} while (input);
//	return 0;
//}


//int main()
//{
//	int x, y;
//	int input = 1;
//	int ret = 0;
//	do
//	{
//		printf("*****************************\n");
//		printf("******1.add  2.sub***********\n");
//		printf("******3.mul  4.div***********\n");
//		printf("******0.exit   **************\n");
//		printf("*****************************\n");
//		
//		printf("请选择：\n");
//		scanf("%d", &input);
//		switch (input)
//		{
//		case 1:
//			printf("输入操作数：\n");
//			scanf("%d %d", &x, &y);
//			ret = add(x, y);
//			printf("ret = %d\n", ret);
//				break;
//		case 2:
//			printf("输入操作数：");
//			scanf("%d %d", &x, &y);
//			ret = sub(x, y);
//			printf("ret = %d\n", ret);
//				break;
//		case 3:
//			printf("输入操作数：");
//			scanf("%d %d", &x, &y);
//			ret = mul(x, y);
//			printf("ret = %d\n", ret);
//				break;
//		case 4:
//			printf("输入操作数：");
//			scanf("%d %d", &x, &y);
//			ret = div(x, y);
//			printf("ret = %d\n", ret);
//				break;
//		case 0:
//			printf("退出程序\n");
//			break;
//		default:
//			printf("选择错误\n");
//			break;
//		}
//	} while (input);
//	return 0;
//}

//qsort使⽤举例
//qsort是库函数，可以完成任意数据类型的数据排序
//void qsort(void* base, //指向要排序的数组的第一个对象的指针，转换为void* 
//			size_t num,//数组中每个元素的字节大小
//			size_t size,//是一个无符号整数类型
//	      int (*compar)(const void*, const void*) //函数指针
// );

//void bubble_sort(int arr[],int sz)
//{
//	for (int i = 0; i < sz-1; i++)
//	{
//		int k = 0;
//		for (int j = 0;j<sz - i- 1;j++) 
//		{
//			if (arr[j]>arr[j+1])
//			{
//				int tmp = arr[j];
//				arr[j] = arr[j + 1];
//				arr[j + 1] = tmp;
//				k = 1;
//			}
//
//		
//		}
//		if (k==0)
//		{
//			break;
//		}
//	}
//	 
//}

//void Print(int arr[],int sz)
//{
//	for (int i = 0; i < sz; i++)
//	{
//		printf("%d ",arr[i]);
//	}
//}

//int com_int(const void *p1,const void *p2) 
//{
//	return *(int*)p1 - *(int*)p2;
//}
//void test() 
//{
//	int arr[10] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	//bubble_sort(arr, sz);
//	
//	qsort(arr, sz, sizeof(arr[0]), com_int);
//	Print(arr, sz);
//}

//int main()
//{
//	int arr[10] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	//bubble_sort(arr, sz);
//	test();
//	//Print(arr, sz);
//	return 0;
//
//}
//按照年龄
struct Stu
{
	char name[20];
	int age;
};
int com_int_age(const void *p1,const void *p2) 
{
	//return ((struct Stu*)p1)->age - ((struct Stu*)p1)->age;
	return (*(struct Stu*)p1).age - (*(struct Stu*)p2).age;
}

int com_int_name(const void* p1, const void* p2)
{
	////strcmp - 是库函数，是专⻔⽤来⽐较两个字符串的⼤⼩的
	//return ((struct Stu*)p1)->age - ((struct Stu*)p2)->age;
	return strcmp((*(struct Stu*)p1).name, (*(struct Stu*)p2).name);
	//return (*(struct Stu*)p1).name - (*(struct Stu*)p2).name;
}


//使⽤qsort排序结构数据
void test2() 
{
	struct Stu arr[] = { {"sak",30},{"lyz",28},{"hqw",89}};
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[1]), com_int_age);
}

void test3()
{
	struct Stu arr[] = { {"sak",30},{"lyz",28},{"hqw",89} };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[1]), com_int_name);
}

int main()
{

	//test2();
	test3();
	return 0;

}